package controllers

import (
	"github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/mvc"
	"github.com/monoculum/formam/v3"
	"iris_product/datamodels"
	"iris_product/services"
	"log"
	"strconv"
)

type ProductController struct {
	Ctx iris.Context
	ProductService *services.ProductService
}

func (p *ProductController) GetAll() mvc.View {
	productList,err := p.ProductService.GetAllProduct()
	if err != nil {
		log.Printf("查询Product列表失败:" + err.Error())
	}
	//p.Ctx.Application().Logger().Debug("获得到商品列表:",productList[0])
	return mvc.View{
		Name: "product/view.html",
		Data: iris.Map{
			"productList":productList,
		},
	}
}

// 修改商品
func (p *ProductController) PostUpdate() {
	var (
		err error
	)
	product := &datamodels.Product{}
	err = p.Ctx.Request().ParseForm()
	if err != nil {
		p.Ctx.Application().Logger().Debug("修改商品参数解析错误:" + err.Error())
	}
	decoder := formam.NewDecoder(&formam.DecoderOptions{TagName: "miaosha"})
	err = decoder.Decode(p.Ctx.Request().PostForm,product)
	if err != nil {
		p.Ctx.Application().Logger().Debug("解析表单数据失败:" + err.Error())
	}
	if product.ID == 0 {
		p.Ctx.Application().Logger().Debug("没有传入ID:")
	}
	err = p.ProductService.UpdateProduct(product)
	if err != nil {
		p.Ctx.Application().Logger().Error("更新商品失败:" + err.Error())
	}
	p.Ctx.Redirect("/product/all")

}

// 添加页面
func (p *ProductController) GetAdd() mvc.View {
	return mvc.View{
		Name: "product/add",
	}
}

func (p *ProductController) GetUpdate() mvc.View {
	// 获取ID
	idString := p.Ctx.URLParam("id")
	id,err := strconv.ParseInt(idString,10,16)
	if err != nil {
		p.Ctx.Application().Logger().Error("字符串转数字错误:" + err.Error())
	}
	product,err := p.ProductService.GetProductById(id)
	if err != nil {
		p.Ctx.Application().Logger().Error("获取商品详情失败:" + err.Error())
	}

	return mvc.View{
		Name: "product/manager",
		Data: iris.Map{
			"product":product,
		},
	}
}

func (p *ProductController) PostAdd() {
	var (
		err error
	)
	product := &datamodels.Product{}
	err = p.Ctx.Request().ParseForm()
	if err != nil {
		p.Ctx.Application().Logger().Debug("新增商品参数解析错误:" + err.Error())
	}
	decoder := formam.NewDecoder(&formam.DecoderOptions{TagName: "miaosha"})
	err = decoder.Decode(p.Ctx.Request().PostForm,product)
	if err != nil {
		p.Ctx.Application().Logger().Debug("解析表单数据失败:" + err.Error())
	}
	id,err:= p.ProductService.InsertProduct(product)
	if err != nil {
		p.Ctx.Application().Logger().Error("新增商品失败:" + err.Error())
	}
	p.Ctx.Application().Logger().Debug("添加商品成功ID为:" + strconv.Itoa(int(id)))
	p.Ctx.Redirect("/product/all")

}

func (p *ProductController) GetDelete()  {
	idStr := p.Ctx.URLParam("id")
	id,err := strconv.ParseInt(idStr,10,16)
	if err != nil {
		p.Ctx.Application().Logger().Error("字符串转数字错误:" + err.Error())
	}
	isSuccess := p.ProductService.DeleteProductById(id)
	if !isSuccess {
		p.Ctx.Application().Logger().Error("删除商品失败")
	}
	p.Ctx.Redirect("product/all")
}


